/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mx.its.dsw2.biblioteca.bl;

import java.util.List;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import mx.its.dsw2.biblioteca.dao.CategoriadelibroDaoLocal;
import mx.its.dsw2.biblioteca.dao.LibroDaoLocal;
import mx.its.dsw2.biblioteca.enumeracion.EstatusTransaccion;
import mx.its.dsw2.biblioteca.modelo.Categoria;
import mx.its.dsw2.biblioteca.modelo.Categoriadelibro;
import mx.its.dsw2.biblioteca.modelo.Libro;

/**
 *
 * @author Juan Carlos
 */
@Stateless
public class LibroBl implements LibroBlLocal {
    @EJB
    private CategoriaBlLocal categoriaBl;
    @EJB
    private CategoriadelibroDaoLocal categoriadelibroDao;
    @EJB
    private LibroDaoLocal libroDao;
    
    
    
    @Override
    public EstatusTransaccion register(Libro book, List<Categoria> categories) {
        if (book .getIsbn() == null && libroDao.findByDuplicity(book)) {
            return EstatusTransaccion.INCOMPLETO;
        }else{
            libroDao.create(book);
            for (Categoria c : categories) {
                Categoriadelibro cdl = new Categoriadelibro();
                cdl.setIdCategoria(c);
                cdl.setIdLibro(book);
                categoriadelibroDao.create(cdl);
            }
            return EstatusTransaccion.COMPLETO;
        }
    }

    @Override
    public EstatusTransaccion remove(Libro book) {
        if (book.getIsbn() == null && libroDao.findByDuplicity(book)) {
            return EstatusTransaccion.INCOMPLETO;
        }else{
            libroDao.remove(book);
            return EstatusTransaccion.COMPLETO;
        }
    }

    @Override
    public EstatusTransaccion modify(Libro book, List<Categoria> lista) {
        if (book.getIsbn() == null && libroDao.findByDuplicity(book)) {
            return  EstatusTransaccion.INCOMPLETO;
        }else{
            libroDao.edit(book);
            List<Categoriadelibro> oldList = book.getCategoriadelibroList();
            for (Categoriadelibro c : oldList) {
                categoriadelibroDao.remove(c);
            }
            for (Categoria c : lista) {
                Categoriadelibro cdl = new Categoriadelibro();
                cdl.setIdCategoria(c);
                cdl.setIdLibro(book);
                categoriadelibroDao.create(cdl);
            }
            return EstatusTransaccion.COMPLETO;
        }
    }

    @Override
    public List<Libro> listAll() {
        return libroDao.findAll();
    }

    
}
